package edu.geo.dao;

import java.io.Serializable;
import java.util.List;

import edu.geo.containers.geom.impl.LineSegment;
import edu.geo.containers.geom.impl.Point;
import edu.geo.containers.geomdomain.GeometricDomain;
import edu.geo.exception.GeoInfoException;

/**
 * 
 * @author alejandro.sanchez
 *
 */
public interface IGeometricDomainDao extends Serializable {
	/**
	 * Crea un nuevo dominio geométrico con los datos especificados.
	 * 
	 * @param geometricDomain Un dominio geométrico.
	 * @return True si el dominio geométrico fue creado satisfactoriamente, false en otro caso.
	 */
	public int insertGeometricDomain(GeometricDomain geometricDomain) throws GeoInfoException;
	public void deleteGeometricDomainDao(int id) throws GeoInfoException;
	public GeometricDomain retrieveGeometricDomain(int id) throws GeoInfoException;
	public List<GeometricDomain> retrieveGeometricDomains() throws GeoInfoException;
	public void addPoint(int geometricDomainId, Point point) throws GeoInfoException;
	public void addLineSegment(int geometricDomainId, LineSegment lineSegment) throws GeoInfoException;
	public void deletePoint(int geomDomainId, Point point) throws GeoInfoException;
	public void deleteLineSegment(int geomDomainId, LineSegment lineSegment) throws GeoInfoException;
	public boolean insertValidGeometricDomain(int originalGeomDomainId, GeometricDomain geometricDomain) throws GeoInfoException;
	public boolean modifyGeometriesDomain(int geomDomainId, List<Point> points, List<LineSegment> lineSegments) throws GeoInfoException;
	public IGeometryDao getGeometryDao();
	public IGridDao getGridDao();
	public void deleteFeature(int geomDomainId, int featureId) throws GeoInfoException;
}
